//泛型

//实现一个存储指定类型的顺序表
class MyArrayList<E>{
    private E[] elem;
    private int usedSize;

    public MyArrayList(){
        //泛型不能实例化泛型数组
        //this.elem = new E[10];
        this.elem = (E[]) new Object[10];//想拿到泛型数组，这样是错的，但暂且这样用
    }

    public void add(E val){
        this.elem[usedSize] = val;
        usedSize++;
    }

    public E get(int pos){
        return this.elem[pos];
    }

}
public class TestDemo3 {

    public static void main(String[] args) {
        MyArrayList<String> myArrayList = new MyArrayList<>();
        System.out.println(myArrayList);
        //泛型是编译器的一种机制，不参与类型组成，运行时会转换为Object(擦除机制)
        //泛型在编译时检查，数组在运行时存储和检查
    }

    public static void main1(String[] args) {
        //把类型参数化
        MyArrayList<String> myArrayList = new MyArrayList<>();
        myArrayList.add("aa");
        System.out.println(myArrayList.get(1));
        //myArrayList.add(1);泛型会自动检查，并自动强制类型转换
    }
}
